//package com.iwhalecloud.bss.kite.spec.impl.bo;
//
//import java.util.List;
//import java.util.Map;
//import java.util.stream.Collectors;
//
//import org.apache.commons.collections.CollectionUtils;
//import org.springframework.beans.BeanUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import com.google.common.collect.Lists;
//import com.iwhalecloud.bss.kite.client.dto.spec.ObjAttrRstrRulDTO;
//import com.iwhalecloud.bss.kite.client.dto.spec.ObjAttrValueRstrRulDTO;
//import com.iwhalecloud.bss.kite.cucc.spec.inf.api.bo.IObjAttrRelBO;
//import com.iwhalecloud.bss.kite.dataservice.cache.ObjAttrRstrRuleItemCache;
//import com.iwhalecloud.bss.kite.dataservice.entity.spec.ObjAttrRstrRulItem;
//import com.iwhalecloud.bss.kite.dataservice.mapper.spec.ObjAttrRstrRulItemMapper;
//
///**
// * @author v
// * @since 2019/6/15
// */
//@Service
//public class QueryObjAttrRstrRulBO implements IObjAttrRelBO{
//
//    @Autowired
//    private ObjAttrRstrRulItemMapper objAttrRelMapper;
//
//    /**
//     * 查询产品属性联动规则
//     *
//     * @param prodId  产品id
//     * @param forward true:正向 false:反向
//     * @return
//     */
//    public List<ObjAttrRstrRulDTO> listProdAttrRstrRuls(String prodId,
//                                                        boolean forward) {
//        List<ObjAttrRstrRulItem> objAttrRelList;
//        List<ObjAttrRstrRulItem> objAttrRelListByProdRel;
//        if (forward) {
//            objAttrRelList = objAttrRelMapper.listProdAttrRelForward(prodId);
//            objAttrRelListByProdRel = objAttrRelMapper
//                .listProdAttrRulItemByProdRelA(prodId);
//        }
//        else {
//            objAttrRelList = objAttrRelMapper.listProdAttrRelBackward(prodId);
//            objAttrRelListByProdRel = objAttrRelMapper
//                .listProdAttrRulItemByProdRelZ(prodId);
//        }
//        if (CollectionUtils.isNotEmpty(objAttrRelListByProdRel)) {
//            objAttrRelList.addAll(objAttrRelListByProdRel);
//        }
//        return objAttrRelListToDTO(objAttrRelList);
//    }
//
//    /**
//     * 查询销售品属性联动规则
//     *
//     * @param offerId
//     * @param forward
//     * @return
//     */
//    public List<ObjAttrRstrRulDTO> listOfferAttrRstrRuls(String offerId,
//                                                         boolean forward) {
//        List<ObjAttrRstrRulItem> objAttrRelList;
//        if (forward) {
//            objAttrRelList = objAttrRelMapper.listOfferAttrRelForward(offerId);
//        }
//        else {
//            objAttrRelList = objAttrRelMapper.listOfferAttrRelBackward(offerId);
//        }
//        return objAttrRelListToDTO(objAttrRelList);
//    }
//
//    /***
//     * 查询礼包约束成员下可选包的数据约束；
//     * @param offerId
//     * @return
//     */
//    public List<ObjAttrRstrRulDTO> listGfitRstrOfferAttrRules(String giftOfferId, String additionalOfferId, String relObjId) {
//        List<ObjAttrRstrRulItem> objAttrRstrRulItems = ObjAttrRstrRuleItemCache.listGfitRstrOfferAttrRules(giftOfferId, additionalOfferId, relObjId);
//        return objAttrRelListToDTO(objAttrRstrRulItems);
//    }
//
//    public List<ObjAttrRstrRulDTO> listGfitRstrOfferAttrDefaultValueRules(String giftOfferId, String additionalOfferId, String relObjId) {
//        List<ObjAttrRstrRulItem> objAttrRstrRulItems = ObjAttrRstrRuleItemCache.listGfitRstrOfferAttrDefaultValueRules(giftOfferId, additionalOfferId, relObjId);
//        return objAttrRelListToDTO(objAttrRstrRulItems);
//    }
//
//    /**
//     * {@link ObjAttrRstrRulItem}列表归约为{@link ObjAttrRstrRulDTO}列表
//     *
//     * @param objAttrRels
//     * @return
//     */
//    private List<ObjAttrRstrRulDTO> objAttrRelListToDTO(List<ObjAttrRstrRulItem> objAttrRels) {
//        Map<String, ObjAttrRstrRulDTO> m = objAttrRels.stream()
//            .collect(Collectors.groupingBy(ObjAttrRstrRulItem::getObjAttrRstrRulId,
//                Collectors.reducing((ObjAttrRstrRulDTO) null, t -> {
//                    ObjAttrRstrRulDTO dto = new ObjAttrRstrRulDTO();
//                    BeanUtils.copyProperties(t, dto);
//                    dto.setObjAttrValueRstrRuls(Lists.newLinkedList());
//                    dto.getObjAttrValueRstrRuls().add(extractAttrValue(t));
//                    return dto;
//                }, (u, v) -> {
//                    if (u == null || CollectionUtils.isEmpty(u.getObjAttrValueRstrRuls())) {
//                        return v;
//                    }
//                    v.getObjAttrValueRstrRuls().addAll(u.getObjAttrValueRstrRuls());
//                    return v;
//                })));
//        return Lists.newArrayList(m.values());
//    }
//
//    private ObjAttrValueRstrRulDTO extractAttrValue(Object t) {
//        ObjAttrValueRstrRulDTO valueDTO = new ObjAttrValueRstrRulDTO();
//        BeanUtils.copyProperties(t, valueDTO);
//        return valueDTO;
//    }
//}
